Costruire un cluster con i computer che vanno dismessi è sicuramente
un'alternativa conveniente, perlomeno per chi sa cosa farsene. Il calcolo
parallelo è una realtà diffusa in molti ambiti, dalle implementazioni cloud al
calcolo scientifico. Per quest'ultimo è particolarmente conveniente utilizzare
un cluster quando si abbiano a disposizione dei programmi
"paralleli", cioè, in soldoni, che usino le librerie MPICH2
(tralasciamo la versione 1 di tali librerie perchè non rappresenta più lo
standard de facto, anche se aveva il pregio di funzionare in cluster
eterogenei).
In questo articolo vorrei presentare, senza la pretesa di essere un
informatico professionale, la realizzazione di un cluster a partire da 13 PC P4
1.5GB con Windows XP SP3. L'obiettivo è quello di mettere in grado il cluster
di far girare codice parallelo scritto utilizzando i linguaggi VB.NET e C#
oltre che i classici programmi in Fortran, C e C++. Verrà brevemente riportata
nel seguito la metodologia utilizzata per selezionare gli strumenti di
partenza, per configurarli e per testarli.
Strumenti necessari
E' necessario procurarsi dapprima le librerie MPICH2 scaricabili da qui (Argonne). Per esigenze di compatibilità con i
programmi da utilizzare (nel mio caso, OpenseesMP) viene adottata la versione
1.3.1 scaricabile da qui in versione a 32bit. A mio personalissimo avviso è
meglio limitare programmi paralleli fatti in casa e di conseguenza le librerie
di supporto alle versioni x86, vista la grande documentazione ed esperienza a
riguardo che si può trovare in rete.
La seconda esigenza di poter utilizzare programmi in VB.NET o C# ci mette di
fronte a 2 scelte: o si adotta l'infrastruttura pronta di Microsoft (Windows
HPC Server 2008, che è a 64bit) oppure si usa l'implementazione dell'Università
dell'Indiana chiamata MPI.NET. Si decide di optare per la seconda possibilità
causa la mancanza di hardware adatto per il server Microsoft. E' comunque
necessario scaricare le librerie di runtine MPI di Ms, disponibili qui (l'ultima versione, qualsiasi altra precedente andava bene).
Finalmente, nell'ordine vengono installati in ogni macchina:
- librerie MPICH2 dell'Argonne (mpich2-1.3.1-win-ia32.msi);
- librerie Microsoft HPC Pack 2008 R2, versione 32bit nel cluster e 64bit
nel mio portatile per lo sviluppo (l'installazione sui sistemi a 64bit è
bloccata per il pacchetto di librerie a 32bit; in ogni caso nel sistema
Microsoft di possono far girare insieme) (mpi_x86.msi);
- librerie MPI.NET per il runtime (MPI.NET Runtime.msi).
Configurazione
Facciamo altri pochi step per settare il cluster:
1 - per ogni macchina è consigliabile disattivare il firewall di Windows o,
se questo non è possibile per qualsivoglia motivo, aprire tutte le porte
necessarie per la comunicazione, che sono:
- porta TCP 8676 per il servizio in ascolto Argonne + una serie di
porte per lo scambio dati settabili dall'utente tramite la variabile d'ambiente
MPICH_PORT_RANGE da aggiungere nel sistema.
- porta TCP 8677 per il servizio in ascolto Microsoft MPI.
2 - settare lo stesso utente amministrativo in tutte le macchine. Se siete
in un dominio l'operazione è facile, se non esiste il dominio la migliore alternativa
è quella di utilizzare il meccanismo di trusting di Windows, cioè
semplicemente usare stesso nome utente e password per l'account amministrativo
in tutti i PC.
3 - per le MPICH2 dell'Argonne è necessario registrare l'utente
amministrativo locale (come abbbiamo detto, lo stesso per tutto il cluster)
tramite il programma wmpiregister disponibile nel menu Start dopo
l'installazione, oppure fare il tutto tramite la riga di comando:
mpiexec -register user
dove user è il nome utente sopracitato.
3 - indipendentemente dal firewall, è necessario avviare manualmente il
servizio smpd.exe contenuto nella cartella di installazione del pacchetto
Microsoft usato prima (tipicamente C:\Program Files\Microsoft HPC Pack 2008
R2\Bin). Va avviato con l'opzione "-d" per indicare che lo avviamo in
debug mode. Per automatizzare il tutto si rimanda ai miei programmi disponibili
su giovanni.rinaldin.org . Attenzione che il servizio va avviato con le
credenziali dell'utente amministratico comune di cui in precendenza. Il
servizio occupa solo la porta 8677 come detto.
4 - nella cartella C:\Program Files\Microsoft HPC Pack 2008 R2\Bin,
rinominare il programma mpiexec.exe in mpiexecms.exe. Inoltre aggiungere nel
PATH di sistema la cartella C:\Program Files (x86)\MPICH2\bin.
Infine, si consiglia di mettere tutte le macchine in una sottorete privata
diversa ma accessibile da altre reti per il lancio dei job e la copia dei
risultati, ma l'argomento rete, qui, è secondario (perché per le vere
prestazioni è necessario utilizzare una rete InfiniBand o Gigabit Ethernet).
Le macchine (d'ora in poi chiamate "nodi") sono ora pronte per
entrare nel cluster.
Testing
Saranno testate le due librerie (Argonne e Microsoft) per verificare il corretto funzionamento. Il test è di fondamentale importanza per individuare possibili problemi nel trasporto di dati via rete, come la mancata risoluzione degli indirizzi, porte bloccate da firewall e così via.
Per testare le librerie Argonne è possibile compilare uno degli esempi forniti a corredo con il pacchetto installato. Gli esempi si trovano in C:\Program Files (x86)\MPICH2\examples o simili. Il comando di lancio è:
mpiexec -np N -machinefile mfile.txt \\nomecomputer\condivisa\cpi.exe
dove N è il numero di macchine interessate, mfile.txt è un file plain text contenente i nomi delle macchine (uno per riga - questo secondo me è il metodo più comodo, vedere anche l'opzione -hosts), "condivisa" è una cartella condivisa che tutte le macchine possono vedere, infine cpi.exe è l'esempio di calcolo del pi greco via integrazione fornito nelle librerie. Se tutto va a buon fine il lancio non visualizza errori e il programma richiede un numero di intervalli di integrazione. Tanto è più alto, tanto il pi greco sarà preciso.
Passiamo ora al test delle librerie Microsoft. Possiamo utilizzare il programma PingPong.exe fornito con gli esempi nell'SDK del pacchetto MPI.NET, in modo da testare la corretta installazione anche di questo.
E' necessario, se non si è loggati in Windows con lo stesso account amministratore con cui vengono eseguiti i job in rete, eseguite il comando "runas" nella shell prima di lanciare il lavoro. Il comando di lancio è il seguente:
mpiexecms -np N -machinefile mfile.txt -dir \\nomecomputer\condivisa \\nomecomputer\condivisa\PingPong.exe
dove i nomi sono quelli adottati nell'esempio precedente, con l'aggiunta del flag -dir che specifica la directory di lavoro. Tale flag è necessario perchè se non ci fosse le librerie Microsoft cercano la cartella locale dove sta l'eseguibile in tutti i PC, e questa potrebbe non esistere. Se questo test va a buon fine, compariranno una serie di messaggi contenenti i nomi di ogni macchina coinvolta.
Conclusioni
Si è mostrato come costruire un cluster con le librerie Argonne e Microsoft HPC senza utilizzare il Windows Server. Tale configurazione non garantisce prestazioni elevate e un controllo stretto dei job lanciati, ma è molto utile in ambiente di sviluppo e ricerca. Infine, molti altri programmi (ad es. OpenSeesMP, ABAQUS, ecc.) di appoggiano a tali librerie per eseguire lavori in parallelo.
Nessun commento:
Posta un commento